<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // async修饰的函数，返回一个promise对象
        // 1.在函数定义时候，作为函数关键字对函数进行修饰
        // async 函数
        // 2.async修饰的函数，在被调用后，固定返回一个promise对象
        // 3.async修饰的函数返回的结果，将作为当前函数构建的promise的PromiseResult的接收值使用
        // 4.async修饰的函数内部的关键字await会将后续定义的代码通过执行promise规则将fulfilled状态的结果值，作为通过代码返回值进行使用
        // 5.async修饰的函数内部的关键字await会将所有的promise对象按照定义顺序自动构成then操作

        // async function show(){
        //     return 111;
        // }
        // var result=show();//promise对象
        // result.then(function(data){
        //     console.log(data);
        // });

        function cratePromise(msg){
            return new Promise(function(resolve,reject){
                setTimeout(function(){
                    resolve(msg);
                },2000);
            });
        }

        // async await在编程语法中被叫做语法糖
        // 语法糖:使用简单关键字或者方法定义，将程序中固定结构或者固定的逻辑封装起来，让程序员通过简单定义方式快速实现代码或提供简单应用规则

        async function test(){
            try{
                let p1=await cratePromise("aaa");
                console.log(p1);
                let p2=await cratePromise("bbb");
                console.log(p2);
                let p3=await cratePromise("ccc");
                console.log(p3);
                let p4=await cratePromise("ddd");
                console.log(p4);
            }catch(e){
                console.log(e);
            }
           
        }
        test();

        //上述语法糖，最终会转换为如下代码

        // var p=cratePromise("aaa");
        // p.then(function(data){
        //     console.log(data);
        //     return cratePromise("bbb");
        // }).then(function(data){
        //     console.log(data);
        //     return cratePromise("ccc");
        // }).then(function(data){
        //     console.log(data);
        //     return cratePromise("ddd");
        // }).catch(function(e){
        //     console.log(e);
        // });
    </script>
</head>
<body>
    
</body>
</html>